www.gusucode.com > VC++ 高仿QQ2008好友界面源码程序 > VC++ 高仿QQ2008好友界面源码程序/code/MyICQ/MyICQDlg.cpp

    // MyICQDlg.cpp : implementation file
// Download by http://www.NewXing.com

#include "stdafx.h"
#include "MyICQ.h"
#include "MyICQDlg.h"
#include "MainTabCtrl.h"
#include "FolderCtrl.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define DE_WM_CLOSE WM_USER+100
#define DE_WM_CRO	WM_USER+101
#define DE_WM_MIN	WM_USER+102
#define DE_WM_HEAD	WM_USER+103
#define DE_WM_MENU	WM_USER+104

#define DE_WM_MOBILE	WM_USER+105
#define DE_WM_MUSIC		WM_USER+106
#define DE_WM_PET		WM_USER+107
#define DE_WM_ZONE		WM_USER+108
#define DE_WM_RESEARCH	WM_USER+109

#define DE_WM_MAIL		WM_USER+110
#define DE_WM_STATE		WM_USER+111
#define DE_WM_MEM		WM_USER+112


#define DE_WM_FOLDERCTRL	WM_USER+113
/////////////////////////////////////////////////////////////////////////////
// CMyICQDlg dialog

CMyICQDlg::CMyICQDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMyICQDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMyICQDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMyICQDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMyICQDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMyICQDlg, CDialog)
	//{{AFX_MSG_MAP(CMyICQDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_NCHITTEST()
	ON_BN_CLICKED(DE_WM_CLOSE,OnDeClose)
	ON_BN_CLICKED(DE_WM_MIN,Min)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyICQDlg message handlers

BOOL CMyICQDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	//
	CRect rc;GetClientRect(&rc);

	//Close Btn
	btnClose.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(rc.right-35,0,rc.right-5,19),this,DE_WM_CLOSE);
	btnClose.SetBmp(IDB_BIT_CLOSE_NORMAL,IDB_BIT_CLOSE_HOVER,IDB_BIT_CLOSE_HDOWN,NULL);
	//Cro Btn
	btnCro.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(rc.right-66,0,rc.right-36,19),this,DE_WM_CRO);
	btnCro.SetBmp(IDB_BIT_CRO_NORMAL,IDB_BIT_CRO_HOVER,IDB_BIT_CRO_HDOWN,NULL);
	//Min Btn
	btnMin.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(rc.right-97,0,rc.right-67,19),this,DE_WM_MIN);

	btnMin.SetBmp(IDB_BIT_MIN_NORMAL,IDB_BIT_MIN_HOVER,IDB_BIT_MIN_HDOWN,NULL);

	//Head Btn
	btnHead.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(11,37,51,77),this,DE_WM_HEAD);
	btnHead.SetBmp(IDB_BIT_HEAD,IDB_BIT_HEAD,IDB_BIT_HEAD,NULL);

	//Menu Btn
	btnMenu.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(0,rc.bottom-34,54,rc.bottom),this,DE_WM_MENU);
	btnMenu.SetBmp(IDB_BIT_MENU_NORMAL,IDB_BIT_MENU_HOVER,IDB_BIT_MENU_HDOWN,NULL);


	btnState.Create("隐身",WS_VISIBLE|WS_CHILD,CRect(70,50,115,70),this,DE_WM_STATE);
	btnState.SetIcon(IDI_STATE,16);

  	btnMail.Create("(0)",WS_VISIBLE|WS_CHILD,CRect(125,50,165,70),this,DE_WM_MAIL);
  	btnMail.SetIcon(IDI_MAIL,16);
	
	

	btnMobile.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(30,rc.bottom-55,50,rc.bottom-35),this,DE_WM_MOBILE);
	btnMobile.SetIcon(IDI_MOBILE,16);

	btnMusic.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(55,rc.bottom-55,75,rc.bottom-35),this,DE_WM_MUSIC);
	btnMusic.SetIcon(IDI_MUSIC,16);

	btnPet.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(80,rc.bottom-55,100,rc.bottom-35),this,DE_WM_PET);
	btnPet.SetIcon(IDI_PET,16);

	btnResearch.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(105,rc.bottom-55,125,rc.bottom-35),this,DE_WM_RESEARCH);
	btnResearch.SetIcon(IDI_RESEARCH,16);

	btnZone.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(130,rc.bottom-55,150,rc.bottom-35),this,DE_WM_ZONE);
	btnZone.SetIcon(IDI_ZONE,16);

 	CRect rcFolderCtrl;rcFolderCtrl.SetRect(rc.left+35,rc.top+89,rc.right-4,rc.bottom-68);
// 	m_folderCtrl=new CFolderCtrl;
//  	m_folderCtrl->Create(WS_CHILD|WS_VISIBLE,rcFolderCtrl,this,DE_WM_FOLDERCTRL);
 	//m_folderCtrl->ShowWindow(SW_HIDE);
//	m_folderCtrl.getsa
// 	CFolderCtrl *folder;
// 	folder->Create(WS_CHILD|WS_VISIBLE,rcFolderCtrl,this,DE_WM_FOLDERCTRL);
	
	CGfxOutBarCtrl *gfx=new CGfxOutBarCtrl;
	DWORD dwf = CGfxOutBarCtrl::fDragItems|CGfxOutBarCtrl::fEditGroups|CGfxOutBarCtrl::fEditItems|CGfxOutBarCtrl::fRemoveGroups|
		CGfxOutBarCtrl::fRemoveItems|CGfxOutBarCtrl::fAddGroups|CGfxOutBarCtrl::fAnimation
		|CGfxOutBarCtrl::fSelHighlight;
	gfx->Create(WS_VISIBLE|WS_CHILD,rcFolderCtrl,this,111111,dwf);
	gfx->AddFolder("我的好友",0);
	gfx->AddFolder("我的同学",1);
	gfx->AddFolder("陌生人",2);
	gfx->AddFolder("黑名单",3);

	
// 	gfx->InsertItem(0,0,"刘若英",0,0);
// 	gfx->InsertItem(0,1,"001",0,0);
// 	gfx->InsertItem(0,1,"002",0,0);

	CInternet *net=new CInternet;
	net->Create(NULL,NULL,WS_CHILD|WS_VISIBLE,rcFolderCtrl,this,22222222);
	net->ShowWindow(SW_HIDE);


///Tab
	tabMem.Create(NULL,WS_CHILD|WS_VISIBLE,CRect(0,90,35,300),this,DE_WM_MEM);
//	tabMem.AddTabItem(IDB_BIT_TAB_NORMAL,IDB_BIT_TAB_HOVER,IDB_BIT_TAB_HOVER,IDI_PAI,NULL);
	tabMem.SetBmp(IDB_BIT_TAB_NORMAL,IDB_BIT_TAB_HOVER,IDB_BIT_TAB_HDOWN);
	tabMem.SetIcon(0,IDI_PAI,gfx);
	tabMem.SetIcon(1,IDI_IT,net);
	tabMem.SetIcon(2,IDI_ONE,NULL);
	tabMem.SetIcon(3,IDI_HEART,NULL);
	tabMem.SetIcon(4,IDI_ONLINE,NULL);
	tabMem.m_iCurrentSelect=0;
//	tabMem.SetIcon(IDI_PAI,NULL);

// 	CRect rect;GetClientRect(&rect);
// 	CMainTabCtrl *pTab=new CMainTabCtrl;
// 	pTab->Create(WS_VISIBLE|WS_CHILD,rect,this,10000);

	
	
// 	CFolderCtrl *pFolder=new CFolderCtrl;
// 	pFolder->Create(WS_VISIBLE|WS_CHILD,rect,pTab,20000);
// 	CFolderCtrl *pFolder=new CFolderCtrl;
// 	pFolder->Create(WS_VISIBLE|WS_CHILD,CRect(0,0,64,69),this,DE_WM_CLOSE);
	return TRUE;  // return TRUE  unless you set the focus to a control
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CMyICQDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CPaintDC dc(this);
		CRect rc;GetClientRect(&rc);
		//rc.InflateRect(CSize(2,12));
		CDC memDC;memDC.CreateCompatibleDC(&dc);
		CBitmap bit;bit.CreateCompatibleBitmap(&dc,rc.Width(),rc.Height());
		CBitmap *OldBmp = memDC.SelectObject(&bit);
		memDC.DrawEdge(rc,EDGE_SUNKEN,0);

		//-------Title1
		//Title1 Left
		CBitmap bmpTitle1Left;bmpTitle1Left.LoadBitmap(IDB_BIT_TITLE1_LEFT);
		DrawBmpByPoint(&memDC,bmpTitle1Left,CPoint(0,0));
		//Title1 Mid
		CBitmap bmpTitle1Mid;bmpTitle1Mid.LoadBitmap(IDB_BIT_TITLE1_MID);
		DrawBmpByCRect(&memDC,bmpTitle1Mid,CRect(64,0,rc.right-79,22));
		//Title1 Right
		CBitmap bmpTitle1Right;bmpTitle1Right.LoadBitmap(IDB_BIT_TITLE1_RIGHT);
		DrawBmpByPoint(&memDC,bmpTitle1Right,CPoint(rc.right-79,0));
		
		//-------Title2
		//Title2 Left
		CBitmap bmpTitle2Left;bmpTitle2Left.LoadBitmap(IDB_BIT_TITLE2_LEFT);
		DrawBmpByPoint(&memDC,bmpTitle2Left,CPoint(0,22));
		//Title2 Mid
		CBitmap bmpTitle2Mid;bmpTitle2Mid.LoadBitmap(IDB_BIT_TITLE2_MID);
		DrawBmpByCRect(&memDC,bmpTitle2Mid,CRect(63,22,rc.right-115,67));
		//Title2 Right
		CBitmap bmpTitle2Right;bmpTitle2Right.LoadBitmap(IDB_BIT_TITLE2_RIGHT);
		DrawBmpByPoint(&memDC,bmpTitle2Right,CPoint(rc.right-115,22));
		
		//-------Center
 		//Center Left
		CBitmap bmpCenterLeft;bmpCenterLeft.LoadBitmap(IDB_BIT_CENTER_LEFT);
		DrawBmpByCRect(&memDC,bmpCenterLeft,CRect(0,89,35,rc.bottom-68));
		//Center Right
 		CBitmap bmpCenterRight;bmpCenterRight.LoadBitmap(IDB_BIT_CENTER_RIGHT);
 		DrawBmpByCRect(&memDC,bmpCenterRight,CRect(rc.right-4,89,rc.right,rc.bottom-68));

		//-------Bottom
		//Bottom Left
		CBitmap bmpBottomLeft;bmpBottomLeft.LoadBitmap(IDB_BIT_BOTTON_LEFT);
		DrawBmpByPoint(&memDC,bmpBottomLeft,CPoint(0,rc.bottom-68));
		//Bottom Mid
		CBitmap bmpBottomMid;bmpBottomMid.LoadBitmap(IDB_BIT_BOTTOM_MID);
		DrawBmpByCRect(&memDC,bmpBottomMid,CRect(73,rc.bottom-68,rc.right-68,rc.bottom));
		//Bottom Right
		CBitmap bmpBottomRight;bmpBottomRight.LoadBitmap(IDB_BIT_BOTTOM_RIGHT);
		DrawBmpByPoint(&memDC,bmpBottomRight,CPoint(rc.right-68,rc.bottom-68));


		//BitBlt
		dc.BitBlt(0,0,rc.Width(),rc.Height(),&memDC,0,0,SRCCOPY);
		//
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMyICQDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

//Change Client-Msg To Caption-Msg
UINT CMyICQDlg::OnNcHitTest(CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	
	UINT nHitTest = CDialog::OnNcHitTest(point);

	if(nHitTest==HTCLIENT)
		nHitTest=HTCAPTION;
	return nHitTest;
}

//Set Bmp by Point
void CMyICQDlg::DrawBmpByPoint(CDC *pDC, CBitmap &mainBmp, const CPoint &pt)
{
	CDC tmpDC;tmpDC.CreateCompatibleDC(pDC);
	BITMAP tmpBmp;
	mainBmp.GetBitmap(&tmpBmp);
	
	CBitmap *oldBmp = tmpDC.SelectObject(&mainBmp);

	pDC->BitBlt(pt.x,pt.y,tmpBmp.bmWidth,tmpBmp.bmHeight,&tmpDC,0,0,SRCCOPY);
	
	tmpDC.SelectObject(&oldBmp);
	oldBmp->DeleteObject();
}

//Set Bmp By CRect
void CMyICQDlg::DrawBmpByCRect(CDC *pDC, CBitmap &bitRect, CRect &rect)
{
	CDC tmpDC;tmpDC.CreateCompatibleDC(pDC);
	BITMAP tmpBmp;
	bitRect.GetBitmap(&tmpBmp);

	CBitmap *oldBmp = tmpDC.SelectObject(&bitRect);

	for(int y=rect.top;y<rect.bottom;y+=tmpBmp.bmHeight)
	{
		for(int x=rect.left;x<rect.right;x+=tmpBmp.bmWidth)
		{
			pDC->BitBlt(x,y,tmpBmp.bmWidth,tmpBmp.bmHeight,&tmpDC,0,0,SRCCOPY);
		}
	}
	tmpDC.SelectObject(&oldBmp);
	oldBmp->DeleteObject();
}

//Close
void CMyICQDlg::OnDeClose()
{
	exit(0);
}

void CMyICQDlg::Min()
{
	ShowWindow(SW_MINIMIZE);
}